package com.mjf.design_pattern;

/*
 	模板设计模式：抽象类作为多个子类的通用模板，子类在抽象类的基础上进行扩展、改造，

 	说明：1.相同的部分放在父类中  2.不同的部分写成抽象方法由子类去实现
 */

abstract class SuperClass{
    public void runTime(){
        //1.开始时间
        long start = System.currentTimeMillis(); //获取当前时间 到1970.1.1 0时0分0秒所经历的毫秒数
        //2.执行代码
        this.runCode(); //sc.runCode(); - 多态：对象是谁调用的就是谁的runCode方法
        //3.结束时间
        long end = System.currentTimeMillis();
        //4.计算时间差
        System.out.println("time=" + (end - start));
    }

    public abstract void runCode();
}

/*
 * 计算1000以内偶数运行的时间
 */
class Computer2 extends SuperClass{
    @Override
    public void runCode(){
        for (int i = 0; i < 1000; i++) {
            if(i % 2 == 0){
                System.out.println(i);
            }
        }
    }
}

/*
 * 计算代码运行的时间
 */
class Computer extends SuperClass{
    @Override
    public void runCode(){
        for (int i = 0; i < 10000; i++) {
            System.out.println(i);
        }
    }
}

public class TemplateMethodModel {

    public static void main(String[] args) {
        SuperClass sc1 = new Computer();
        sc1.runTime();

//        SuperClass sc2 = new Computer2();
//        sc2.runTime();
    }
}
